In [1]:
import pandas as pd

#https://www3.bcb.gov.br/sgspub/localizarseries/localizarSeries.do?method=prepararTelaLocalizarSeries

#Taxa de juros - Meta Selic definida pelo Copom
url = 'http://api.bcb.gov.br/dados/serie/bcdata.sgs.432/dados?formato=json&dataInicial=01/01/2000&dataFinal=20/08/2021' 
juros = pd.read_json(url)
In [2]:
juros.head()
Out[2]:
data valor
0 01/01/2000 19.0
1 02/01/2000 19.0
2 03/01/2000 19.0
3 04/01/2000 19.0
4 05/01/2000 19.0
In [3]:
#alteração necessária para por em formato y/m/d

data = []
for i in range(len(juros.valor)):
    dia = str(juros.data[i][:2])
    mes = str(juros.data[i][3:5])
    ano = str(juros.data[i][6:10])
    data.append(int(ano+mes+dia))

juros.data = data
juros.data = pd.to_datetime(juros.data, format='%Y%m%d', errors='ignore') 
In [4]:
juros.head()
Out[4]:
data valor
0 2000-01-01 19.0
1 2000-01-02 19.0
2 2000-01-03 19.0
3 2000-01-04 19.0
4 2000-01-05 19.0
In [5]:
import yfinance as yf

ibov = yf.download('^BVSP', start = '2000-01-01', end = '2021-08-20')
[*********************100%***********************]  1 of 1 completed
In [6]:
ibov.head()
Out[6]:
Open High Low Close Adj Close Volume
Date
2000-01-03 17098.0 17408.0 16719.0 16930.0 16930.0 0
2000-01-04 16908.0 16908.0 15851.0 15851.0 15851.0 0
2000-01-05 15871.0 16302.0 15350.0 16245.0 16245.0 0
2000-01-06 16237.0 16499.0 15977.0 16107.0 16107.0 0
2000-01-07 16125.0 16449.0 16125.0 16309.0 16309.0 0

Normalização dos dados

image.png

In [7]:
ibov_norm = []
selic_norm = []

for i in ibov.Close:
    ibov_norm.append((i - ibov.Close.min()) / (ibov.Close.max() - ibov.Close.min()))
    
for i in juros.valor:
    selic_norm.append((i - juros.valor.min()) / (juros.valor.max() - juros.valor.min()))   
In [8]:
import plotly.graph_objects as go

fig = go.Figure(data=[go.Scatter(x=juros.data, y=selic_norm, name="SELIC"),
       go.Scatter(x=ibov.index, y=ibov_norm, name="IBOV")])
                      
fig.show()
In [9]:
juros.set_index(juros.data, inplace=True)
In [10]:
result = pd.concat([juros, ibov[['Close','Volume']]], axis=1)
In [11]:
#correlação
result.corr()
Out[11]:
valor Close Volume
valor 1.000000 -0.898895 -0.063542
Close -0.898895 1.000000 0.037126
Volume -0.063542 0.037126 1.000000